class Solution {
public:
    vector<int> canSeePersonsCount(vector<int>& heights) {
        int n = heights.size();

        vector<int> answer(n, 0);
        stack<int> s;
        
        for (int i = n - 1; i >= 0; i--)         //反向压入栈
        {
            int count = 0;
            
            while (!s.empty() && heights[i] > heights[s.top()]) {
                count++;
                s.pop();
            }
            
            if (!s.empty()) 
            {
                count++;             //不需要去处理一直递减的情况，只要不为空就一直加。
            }
            
            answer[i] = count;
            s.push(i);
        }
        
        return answer;
    }
};
// 如果正常顺序压入栈，那么在讨论样例1中的8，5，11很难去计数，既然向右看，那我就从左往右压入